package cloud.xlh.exceptionhandle.service;


import cloud.xlh.exceptionhandle.exception.BaseException;

/**
 * Created with IntelliJ IDEA.
 *
 * @ project name : xlh_osms
 * @ Author: XuLeHuang
 * @ Date: 2022/12/8 11:22
 * @ Description: 断言接口
 */
public interface Assert {
    /**
     * 创建异常
     *
     * @param args
     * @return
     */
    BaseException newException(Object... args);

    /**
     * 创建异常
     *
     * @param t
     * @param args
     * @return
     */
    BaseException newException(Throwable t, Object... args);

    /**
     * <p>断言对象<code>obj</code>非空。如果对象<code>obj</code>为空，则抛出异常
     *
     * @param obj 待判断对象
     */
    default void assertObjectNotNull(Object obj) {
        if (obj == null) {
            throw newException(obj);
        }
    }

    /**
     * todo 看是否将来能将 assertObjectNotNull 和 assertStrNotNull 合并
     * <p>断言字符串str非空。如果对象<code>str为空，则抛出异常
     *
     * @param str 待判断字符串
     */
    default void assertStrNotNull(String str) {
        assertObjectNotNull(str);
        if (str.length() == 0) {
            throw newException(str);
        }
    }

    /**
     * <p>断言对象<code>obj</code>非空。如果对象<code>obj</code>为空，则抛出异常
     * <p>异常信息<code>message</code>支持传递参数方式，避免在判断之前进行字符串拼接操作
     *
     * @param obj  待判断对象
     * @param args message占位符对应的参数列表
     */
    default void assertNotNull(Object obj, Object... args) {
        if (obj == null) {
            throw newException(args);
        }
    }
}